/*
const bar = () => console.log('bar')

const baz = () => console.log('baz')

const foo = () => {
  console.log('foo')
  setTimeout(bar, 0)
  baz()
}

foo()
*/

// foo
// baz
// bar

// 事件循环
// 消息队列：setTimeout fetch 用户触发的事件（如单击或键盘事件、或获取响应） 由浏览器提供的，并且位于它们自身的线程中 放在调用堆栈的末尾
// es6 作业队列：Promise 在当前函数之后被立即执行

const bar = () => console.log('bar')

const baz = () => console.log('baz')

const foo = () => {
  console.log('foo')
  setTimeout(bar, 0)
  new Promise((resolve, reject) =>
    resolve('应该在 baz 之后、bar 之前')
    // reject('xx')
  )
  .then(resolve => console.log(resolve))
  .catch(reject => console.log(reject))
  baz()
}

foo()
